class Solution {
public:
    bool judgeSquareSum(int c) {
        // 双指针
        int a = 0, b = (int)sqrt(c);
        while(a <= b)
        {
            if(a * a > c - b * b)
                b--;
            else if(a * a  < c - b * b)
                a++;
            else
                return true;
        }
        return false;


        // 空间复杂度是O(1)，时间复杂度是O(sqrt(c))，开平方有专门的 CPU 指令，可以视作 O(1)
        // for(long long a = 0; a * a <= c / 2; a++)
        // {
        //     int b = static_cast<int>(sqrt(c - a * a));
        //     if(a * a + b * b == c)
        //         return true;
        // }
        // return false;
    }
};